package co.edu.usbcali.presentation.backEndBeans;

import java.util.List;
import java.util.Random;

import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;

import co.edu.usbcali.modelo.Preinscripcion;
import co.edu.usbcali.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.utilities.EnviarMail;
import co.edu.usbcali.utilities.FacesUtils;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class PopupBean {
	private boolean visible;
	private boolean visibleArea;
	private HtmlOutputText txtCargoPre;
	private HtmlOutputText txtCargoTutorPre;
	private HtmlOutputText txtCelularTutorPre;
	private HtmlInputTextarea txtDescripcionPre;
	// private List<SelectItem> selectItems;
	// private HtmlSelectOneRadio radioLabora;
	private HtmlOutputText txtLaboresPre;
	private HtmlOutputText txtLugarLaboraPre;
	private HtmlOutputText txtNombreTutorPre;
	private HtmlInputTextarea txtObjetivoPre;
	private HtmlOutputText txtTelefonoTutorPre;
	private HtmlOutputText txtTemasPre;
	private HtmlOutputText txtAreaDesempeno;
	private HtmlOutputText txtEmpresa;
	private HtmlOutputText txtEmailPra_Practicante;
	private HtmlOutputText txtTelFijoPra_Practicante;
	private HtmlOutputText txtCelularPra_Practicante;
	private HtmlOutputText txtCodPra_Practicante;
	private HtmlOutputText txtNombPra_Practicante;
	private HtmlOutputText txtTelEmp_Empresa;
	private HtmlOutputText txtDirEmp_Empresa;
	// private HtmlSelectOneMenu cbbEmpresa;
	private HtmlOutputText txtFechaFinalPre;
	private HtmlOutputText txtFechaInicioPre;
	private HtmlOutputText txtFechaPre;
	private HtmlInputTextarea txtAreaComentarios;
	private HtmlCommandButton btnAprobar;
	private HtmlCommandButton btnRechazar;
	private String clave;
	private final String EMAILEMISOR = "gomezchalacan@gmail.com";
	private final String CLAVEEMISOR = "gomezchalacan5";

	public String getClave() {
		return clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	public HtmlCommandButton getBtnAprobar() {
		return btnAprobar;
	}

	public void setBtnAprobar(HtmlCommandButton btnAprobar) {
		this.btnAprobar = btnAprobar;
	}

	public HtmlCommandButton getBtnRechazar() {
		return btnRechazar;
	}

	public void setBtnRechazar(HtmlCommandButton btnRechazar) {
		this.btnRechazar = btnRechazar;
	}

	public HtmlOutputText getTxtCargoPre() {
		return txtCargoPre;
	}

	public void setTxtCargoPre(HtmlOutputText txtCargoPre) {
		this.txtCargoPre = txtCargoPre;
	}

	public HtmlOutputText getTxtCargoTutorPre() {
		return txtCargoTutorPre;
	}

	public void setTxtCargoTutorPre(HtmlOutputText txtCargoTutorPre) {
		this.txtCargoTutorPre = txtCargoTutorPre;
	}

	public HtmlOutputText getTxtCelularTutorPre() {
		return txtCelularTutorPre;
	}

	public void setTxtCelularTutorPre(HtmlOutputText txtCelularTutorPre) {
		this.txtCelularTutorPre = txtCelularTutorPre;
	}

	public HtmlInputTextarea getTxtDescripcionPre() {
		return txtDescripcionPre;
	}

	public void setTxtDescripcionPre(HtmlInputTextarea txtDescripcionPre) {
		this.txtDescripcionPre = txtDescripcionPre;
	}

	public HtmlOutputText getTxtLaboresPre() {
		return txtLaboresPre;
	}

	public void setTxtLaboresPre(HtmlOutputText txtLaboresPre) {
		this.txtLaboresPre = txtLaboresPre;
	}

	public HtmlOutputText getTxtLugarLaboraPre() {
		return txtLugarLaboraPre;
	}

	public void setTxtLugarLaboraPre(HtmlOutputText txtLugarLaboraPre) {
		this.txtLugarLaboraPre = txtLugarLaboraPre;
	}

	public HtmlOutputText getTxtNombreTutorPre() {
		return txtNombreTutorPre;
	}

	public void setTxtNombreTutorPre(HtmlOutputText txtNombreTutorPre) {
		this.txtNombreTutorPre = txtNombreTutorPre;
	}

	public HtmlInputTextarea getTxtObjetivoPre() {
		return txtObjetivoPre;
	}

	public void setTxtObjetivoPre(HtmlInputTextarea txtObjetivoPre) {
		this.txtObjetivoPre = txtObjetivoPre;
	}

	public HtmlOutputText getTxtTelefonoTutorPre() {
		return txtTelefonoTutorPre;
	}

	public void setTxtTelefonoTutorPre(HtmlOutputText txtTelefonoTutorPre) {
		this.txtTelefonoTutorPre = txtTelefonoTutorPre;
	}

	public HtmlOutputText getTxtTemasPre() {
		return txtTemasPre;
	}

	public void setTxtTemasPre(HtmlOutputText txtTemasPre) {
		this.txtTemasPre = txtTemasPre;
	}

	public HtmlOutputText getTxtAreaDesempeno() {
		return txtAreaDesempeno;
	}

	public void setTxtAreaDesempeno(HtmlOutputText txtAreaDesempeno) {
		this.txtAreaDesempeno = txtAreaDesempeno;
	}

	public HtmlOutputText getTxtEmpresa() {
		return txtEmpresa;
	}

	public void setTxtEmpresa(HtmlOutputText txtEmpresa) {
		this.txtEmpresa = txtEmpresa;
	}

	public HtmlOutputText getTxtEmailPra_Practicante() {
		return txtEmailPra_Practicante;
	}

	public void setTxtEmailPra_Practicante(HtmlOutputText txtEmailPraPracticante) {
		txtEmailPra_Practicante = txtEmailPraPracticante;
	}

	public HtmlOutputText getTxtTelFijoPra_Practicante() {
		return txtTelFijoPra_Practicante;
	}

	public void setTxtTelFijoPra_Practicante(
			HtmlOutputText txtTelFijoPraPracticante) {
		txtTelFijoPra_Practicante = txtTelFijoPraPracticante;
	}

	public HtmlOutputText getTxtCelularPra_Practicante() {
		return txtCelularPra_Practicante;
	}

	public void setTxtCelularPra_Practicante(
			HtmlOutputText txtCelularPraPracticante) {
		txtCelularPra_Practicante = txtCelularPraPracticante;
	}

	public HtmlOutputText getTxtCodPra_Practicante() {
		return txtCodPra_Practicante;
	}

	public void setTxtCodPra_Practicante(HtmlOutputText txtCodPraPracticante) {
		txtCodPra_Practicante = txtCodPraPracticante;
	}

	public HtmlOutputText getTxtNombPra_Practicante() {
		return txtNombPra_Practicante;
	}

	public void setTxtNombPra_Practicante(HtmlOutputText txtNombPraPracticante) {
		txtNombPra_Practicante = txtNombPraPracticante;
	}

	public HtmlOutputText getTxtTelEmp_Empresa() {
		return txtTelEmp_Empresa;
	}

	public void setTxtTelEmp_Empresa(HtmlOutputText txtTelEmpEmpresa) {
		txtTelEmp_Empresa = txtTelEmpEmpresa;
	}

	public HtmlOutputText getTxtDirEmp_Empresa() {
		return txtDirEmp_Empresa;
	}

	public void setTxtDirEmp_Empresa(HtmlOutputText txtDirEmpEmpresa) {
		txtDirEmp_Empresa = txtDirEmpEmpresa;
	}

	public HtmlOutputText getTxtFechaFinalPre() {
		return txtFechaFinalPre;
	}

	public void setTxtFechaFinalPre(HtmlOutputText txtFechaFinalPre) {
		this.txtFechaFinalPre = txtFechaFinalPre;
	}

	public HtmlOutputText getTxtFechaInicioPre() {
		return txtFechaInicioPre;
	}

	public void setTxtFechaInicioPre(HtmlOutputText txtFechaInicioPre) {
		this.txtFechaInicioPre = txtFechaInicioPre;
	}

	public HtmlOutputText getTxtFechaPre() {
		return txtFechaPre;
	}

	public void setTxtFechaPre(HtmlOutputText txtFechaPre) {
		this.txtFechaPre = txtFechaPre;
	}

	public boolean isVisible() {
		return visible;
	}

	public void setVisible(boolean visible) {
		this.visible = visible;
	}

	public void closePopup() {
		visible = false;
		visibleArea = false;
	}

	public boolean isVisibleArea() {
		return visibleArea;
	}

	public void setVisibleArea(boolean visibleArea) {
		this.visibleArea = visibleArea;
	}

	public HtmlInputTextarea getTxtAreaComentarios() {
		return txtAreaComentarios;
	}

	public void setTxtAreaComentarios(HtmlInputTextarea txtAreaComentarios) {
		this.txtAreaComentarios = txtAreaComentarios;
	}

	/*public void rowSelectionListener(RowSelectorEvent event) {
		System.out.println(event.getRow());
		obtenerPreinscripcion(event.getRow());
		visible = true;
	}
	*/
	
	public void action_select(ActionEvent event){
		String codSelect= FacesUtils.getRequestParameter("codigoPra");
		obtenerPreinscripcion(Long.parseLong(codSelect));
		visible = true;
	}

	private void crearCuenta() {
		Random r = new Random();
		int x = r.nextInt(1452);
		setClave("" + x);
		try {
			while (BusinessDelegatorView.getCuentabyUsuario(txtCodPra_Practicante.getValue().toString()) != null) {

				x = r.nextInt(1452);
				setClave("" + x);
			}
			BusinessDelegatorView.saveCuenta(getClave(), new Long(1), new Long(
					3), txtCodPra_Practicante.getValue().toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			FacesUtils.addErrorMessage(e.getMessage());
		}
	}

	public void aceptar() {
		try {
			Long estadoPre = new Long(0);
			BusinessDelegatorView.updatePreinscripcion(estadoPre, Long
					.parseLong(txtCodPra_Practicante.getValue().toString()));

			crearCuenta();

			String mensaje = "Su propuesta de practica ha sido aceptada\n"
					+ "Para acceder a su cuenta su clave y usuario son\n Clave: "
					+ getClave() + "\n" + " Usuario: "
					+ txtCodPra_Practicante.getValue().toString();

			EnviarMail.Enviar(txtEmailPra_Practicante.getValue().toString(),
					EMAILEMISOR, CLAVEEMISOR, "Preinscripcion ACEPTADA",
					mensaje);
			visibleArea = false;
			visible = false;

		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void rechazar() {
		visibleArea = true;
	}

	public void confirmarRechazo() {
		EnviarMail.Enviar(txtEmailPra_Practicante.getValue().toString(),
				EMAILEMISOR, CLAVEEMISOR, "Preinscripcion RECHAZADA",
				txtAreaComentarios.getValue().toString());
		visibleArea = false;
		visible = false;
	}

	public void obtenerPreinscripcion(Long codPracticante) {
		Long codPrac = codPracticante;

		/*List<Preinscripcion> listPre = null;
		try {
			listPre = BusinessDelegatorView.getPreinscripcion();
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}*/
		Preinscripcion entity = null;
		try {
			entity = BusinessDelegatorView.getPreinscripcion(codPrac);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		txtCargoPre.setValue(entity.getCargoPre());
		txtCargoTutorPre.setValue(entity.getCargoTutorPre());
		txtCelularTutorPre.setValue(entity.getCelularTutorPre());
		txtDescripcionPre.setValue(entity.getDescripcionPre());
		txtDescripcionPre.setDisabled(true);
		txtFechaFinalPre.setValue(entity.getFechaFinalPre());
		txtFechaInicioPre.setValue(entity.getFechaInicioPre());
		txtFechaPre.setValue(entity.getFechaPre());
		txtLaboresPre.setValue(entity.getLaboresPre());
		txtLugarLaboraPre.setValue(entity.getLugarLaboraPre());
		txtNombreTutorPre.setValue(entity.getNombreTutorPre());
		txtObjetivoPre.setValue(entity.getObjetivoPre());
		txtObjetivoPre.setDisabled(true);
		txtTelefonoTutorPre.setValue(entity.getTelefonoTutorPre());
		txtTemasPre.setValue(entity.getTemasPre());
		txtAreaDesempeno.setValue(entity.getAreaDesempeno().getCodigoArea());
		txtEmpresa.setValue(entity.getEmpresa().getNombreEmp());
		// txtCodigoEmp_Empresa.setDisabled(false);
		txtNombPra_Practicante.setValue(entity.getPracticante().getNombrePra());
		txtCodPra_Practicante.setValue(entity.getPracticante().getCodPra());
		txtEmailPra_Practicante.setValue(entity.getPracticante().getEmailPra());
		txtTelFijoPra_Practicante.setValue(entity.getPracticante()
				.getTelFijoPra());
		txtCelularPra_Practicante.setValue(entity.getPracticante()
				.getCelularPra());
		txtTelEmp_Empresa.setValue(entity.getEmpresa().getTelefonoEmp());
		txtDirEmp_Empresa.setValue(entity.getEmpresa().getDireccionEmp());
		System.out.println("Este es el estado de la preinscripcion: "
				+ entity.getEstadoPre());
		if (entity.getEstadoPre() == 0) {
			btnAprobar.setDisabled(true);
			btnRechazar.setDisabled(true);
		}else{
			btnAprobar.setDisabled(false);
			btnRechazar.setDisabled(false);
		}
	}

}
